package com.hongchen.wechat.controller;

import com.hongchen.model.ActGame;
import com.hongchen.model.ActGamePrize;
import com.hongchen.model.ActPrize;
import com.hongchen.model.ActUser;
import com.hongchen.wechat.config.Api;
import com.hongchen.wechat.config.JSSDKInterceptor;
import com.hongchen.wechat.service.RichService;
import com.jfinal.aop.Before;
import com.jfinal.weixin.sdk.api.ApiConfigKit;
import com.jfinal.weixin.sdk.api.ApiResult;


import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Random;

import static com.jfinal.aop.Enhancer.enhance;

/**
 * Created by cyq on 2018/1/18 0018.
 * 大转盘游戏控制层
 */
@Before(JSSDKInterceptor.class)
public class BigWheelController extends Api {
    private final RichService richService=enhance(RichService.class);
    ActUser actU = new ActUser();//存储用户信息便于使用

    public void index() {
        //这里定义一个对象存储用户的个人信息
        ApiResult info = userdetail();
        String openId = info.get("openid");

        /**
         * 判断用户刷新以后openid是否为空
         * 如果为空的话重新拉去用户信息
         */
        if(openId==null){
            this.redirect("https://open.weixin.qq.com/connect/oauth2/authorize?appid="+appId()+"&redirect_uri=http://"+chengDong()+".tunnel.echomod.cn/big&response_type=code&scope=snsapi_userinfo&state=#wechat_redirect");
        }else {
            String nickName=info.get("nickname");
            String headImg=info.get("headimgurl");
            String tel=info.get("tel");
            int sex=info.getInt("sex");
            String city=info.get("city");

            if(openId != null){
                actU.setWechatOpenid(openId);
            }
            if(headImg != null){
                actU.setHeadImg(headImg);
            }
            if(tel != null){
                actU.setTel(tel);
            }
            if(nickName != null){
                actU.setWechatNickname(nickName);
            }
            actU.setSex(sex);
            if(city != null){
                actU.setCity(city);
            }

            ActUser user = richService.findByOpenid(openId);//判断用户是否已经在数据库存在
            if(user == null){//新增
                actU.setCreateTime(new Date());
                if(actU.save()){
                    ActGame actGame=new ActGame();//表示用户准备玩游戏
                    actGame.setActUserId(actU.getId());
                    if(actGame.save()){
                        setAttr("btcnum",actGame.getBigTurnChance());
                        setAttr("btcuser",actU.getId());
                    }
                }
            }else{//老用户：更新用户信息
                actU.setId(user.getId());
                user = actU;
                user.setUpdateTime(new Date());
                if(user.update()){//更新用户信息成功
                    actU=user;
                }
                setAttr("btcnum",richService.bigChance(user.getId()));//查询大转盘机会数
                setAttr("btcuser",actU.getId());
            }
            setAttr("openid",openId);
            render("bigwheel.html");
        }
    }

    /**
     * 用户点击分享后执行
     * 直接进行授权
     */
    public void wx(){
        this.redirect("https://open.weixin.qq.com/connect/oauth2/authorize?appid="+appId()+"&redirect_uri=http://"+chengDong()+".tunnel.echomod.cn/big&response_type=code&scope=snsapi_userinfo&state=#wechat_redirect");
    }

    public void startGame() {
        Long prize = 0L;//定义用户中的奖品
        Long userId = getParaToLong("userId");
        ActGame actg = richService.finds(userId);//查询用户关联游戏表
        if(actg != null){
            actg.setNowTime(new Date());
            actg.update();//更新游戏时间
            if(actg.getBigTurnChance() <= 0){//没有玩大转盘的机会
                setAttr("btcnum",0);
                setAttr("rand",prize);
                renderJson();
            }else{
                if(richService.lessOneBig(userId) > 0){//大转盘机会减一成功
                /*抽奖方法：中奖几率90%，实物奖励为60%，机会奖励20%，没奖励为20%；
                 * 随机一个三位数00-99，是否中奖：谢谢参与[0-10），奖励一次塞子机会[10,20）
                 * 中奖：[20-99，依据奖品数量决定获得奖品概率，越多几率越大；
                 * 7:美食卡；8：绿植；9：装饰礼品；10：家具奖励劵；11：装修礼包；12:情侣对戒； 13：健身卡；14：红包；15：增加一次塞子机会 其他：谢谢参与
                 * */
                    int rand =  new Random().nextInt(100);//开始游戏
                    //获取用户上次得到大转盘奖品天数
                    if( rand >= 40){//中奖
                        List<ActPrize> apList = richService.typePrize(1);//查询大转盘奖品集合
                        if(apList != null){
                            ActPrize ap = richService.isPrize(apList);//奖品
                            if(ap != null){
                                int stillNum = richService.stillNum(ap.getId());//今日是否还有奖品
                                int allNum = richService.allNum(ap.getId());//奖品总数还有多少
                                prize = ap.getId();
                                if(stillNum > 0 && allNum > 0){
                                    ActGamePrize agp = new ActGamePrize();
                                    agp.setGameId(actg.getId());
                                    agp.setPrizeId(ap.getId());
                                    agp.setPrizeNum(richService.lastPrizeNo()); //中奖编号
                                    agp.setAwardTime(new Date());//当前中奖时间
                                    agp.setAcceptTime(getFetureDate(7));//生成7天后的领奖截止时间
                                    agp.setAcceptAddres("英协路56号传媒创意中心14层河南新维思广告有限公司");
                                    if(agp.save()){//保存中奖信息
                                        setAttr("nump",ap.getStillNum());//剩余奖品数
                                        if(richService.lessOnePrize(ap.getId()) >= 1){//奖品单日上限数量和总数量同时减一
                                            setAttr("valuep",ap.getPrizeValue());//奖品价值
                                            setAttr("namep",ap.getPrizeName());//奖品名
                                            setAttr("nop",agp.getPrizeNum());//奖品编号
                                        }
                                    }
                                }else {
                                    setAttr("nump",0);//剩余奖品数0:虽然中奖但是中的奖品没了!
                                }
                            }else {
                                Long[] arrL =new Long[apList.size()];
                                for(int i = 0;i < apList.size();i++){
                                    arrL[i] = apList.get(i).getId();
                                }
                                prize = arrL[new Random().nextInt(apList.size())];
                                setAttr("nump",0);//剩余奖品数0:所有奖品都没了!
                            }
                        }
                    }else {//没中
                        if(rand >= 20){//奖励:增加一次投塞子机会
                            richService.updateSieveChance(userId);
                            prize = 15L;
                        }else{
                            prize = 16L;//谢谢参与
                        }
                    }
                    setAttr("btcnum",actg.getBigTurnChance());//大转盘机会
                };
                setAttr("rand",prize);//大转盘结果
                renderJson();
            }
        }



    }

    /**
     * 用户首次分享，增加抽奖次数
     */
    public void share(){
        String openid = getPara("openid");
        ActUser actU = richService.findByOpenid(openid);
        if(actU != null){
            if(richService.addOneBig(actU.getId()) > 0){
                setAttr("lotteryTime",2);
            }
        }
        renderJson();
    }

    /**
     * 我的奖品
     */
    public void me(){
        ApiConfigKit.setThreadLocalApiConfig(getApiConfig());

        //跳转获取到的code
        String code = getPara("code");

        //获取方法 通过 pcode 来获取openid
        //SnsAccessToken SAT = SnsAccessTokenApi.getSnsAccessToken(AppId,AppSecret,code);
        //获取openid
       // String openid=SAT.getOpenid();
//        String token = SAT.getAccessToken();
//        ApiResult ssr=SnsApi.getUserInfo(token,openid);
        //根据openid查找用户
       /* ActivityJoin aj=activityJoinService.findByOpenid(openid);
        if(aj!=null){
            List<ActivityInfo> user=activityInfoService.finald(aj.getId());
            setAttr("user",user);
        }else{
            setAttr("user","");
        }*/
        render("my-prize.html");

    }

    /**
     * 获取未来 第 past 天的日期
     * @param past
     * @return
     */
    public static Date getFetureDate(int past) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + past);
        Date today = calendar.getTime();
        //SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //String result = format.format(today);//返回字符串类型时使用；
        return today;
    }

}
